home *** CD-ROM | disk | FTP | other *** search
- /* rabbit */
- /* rabbit runs around the field, randomly */
- /* and never fires; use as a target */
-
-
- main()
- {
-
- while(1) {
- go(rand(1000),rand(1000)); /* go somewhere in the field */
- }
-
- } /* end of main */
-
-
-
- /* go - go to the point specified */
-
- go (dest_x, dest_y)
- int dest_x, dest_y;
- {
- int course;
-
- course = plot_course(dest_x,dest_y);
- drive(course,25);
- while(distance(loc_x(),loc_y(),dest_x,dest_y) > 50)
- ;
- drive(course,0);
- while (speed() > 0)
- ;
- }
-
- /* distance forumula */
-
- distance(x1,y1,x2,y2)
- int x1;
- int y1;
- int x2;
- int y2;
- {
- int x, y;
-
- x = x1 - x2;
- y = y1 - y2;
- d = sqrt((x*x) + (y*y));
-
- return(d);
- }
-
- /* plot_course - figure out which heading to go */
-
- plot_course(xx,yy)
- int xx, yy;
- {
- int d;
- int x,y;
- int scale;
- int curx, cury;
-
- scale = 100000; /* scale for trig functions */
-
- curx = loc_x();
- cury = loc_y();
- x = curx - xx;
- y = cury - yy;
-
- if (x == 0) {
- if (yy > cury)
- d = 90;
- else
- d = 270;
- } else {
- if (yy < cury) {
- if (xx > curx)
- d = 360 + atan((scale * y) / x);
- else
- d = 180 + atan((scale * y) / x);
- } else {
- if (xx > curx)
- d = atan((scale * y) / x);
- else
- d = 180 + atan((scale * y) / x);
- }
- }
- return (d);
- }
-
- /* end of rabbit.r */